#include <stdio.h>
#include <stdlib.h>

// 函数声明
int test(int, int);

// 函数指针
int (*p)(int, int) = &test;
// 指向的函数返回值类型 (*函数指针变量名) (指向的函数的形参列表);

// int (*p)[5] = xx;

/* 函数指针数组=================== */

void a(int n)
{
    printf("a %d\n", n);
}
void b(int n)
{
    printf("b %d\n", n);
}

void c(int n)
{
    printf("c %d\n", n);
}

/* 函数指针数组=================== */

int main(int argc, char const *argv[])
{

    printf("%p\n", test); // test是一个函数名 转化为指向这个函数的函数指针
    printf("%p\n", &test);
    printf("%p\n", p);

    int ret = (*p)(1, 2);
    printf("%d\n", ret);

    // 函数指针数组
    void (*pArr[3])(int) = {a, b, c};
    for (int i = 0; i < 3; i++)
    {
        (*(pArr[i]))(50);
    }
    return 0;
}

// 函数定义
int test(int a, int b)
{
    return a + b;
}
